package com.hspedu.innerClass.category;

/**
 * 成员内部类
 */
public class MemberInnerClass {
    public static void main(String[] args) {
        //Outer08.Inner08 inner08 = new Outer08.Inner08();// 没有静态的类种类不能使用外部类进行操作，



        /**其他类调用一个类中的成员内部类
         * 第一种
         * A a = new A();
         * A.B ab = a.new B();
         */
        Outer08 outer08 = new Outer08();
        Outer08.Inner08 inner08 = outer08.new Inner08();
        inner08.say();


        //第二种调用：在外部类中写一个方法，可以返回内部类的对象
        Outer08.Inner08 instance = outer08.getInner08Instance();
        instance.say();



    }
}

class Outer08{
    private int n1 = 10;
    public String name = "张三";

    private void hi(){
        System.out.println("hi()");
    }
    /**
     * 1.成员内部类，是定义在外部类的成员位置上
     * 2.可以添加任意访问修饰符(public protected 默认 private),因为其地位就是一个成员
     */
    public class Inner08{//成员内部类
        public void say(){
            //可以直接访问外部类的所有成员，包含私有的
            System.out.println("n1 = " + n1 + " name = " + name + " 外部类的n1 = " + Outer08.this.n1);
            hi();
        }
    }

    public Inner08 getInner08Instance(){
//        //使用成员内部类的方法，要先创建内部类的对象，再调用方法
//        Inner08 inner08 = new Inner08();
//        inner08.say();
        return new Inner08();//返回一个内部类的实例
    }
}
class AA{
    public static void main(String[] args) {
        //Outer08.Inner08 inner08 = new Outer08.Inner08();// 没有静态的类种类不能使用外部类进行操作，


    }
}